#ifndef CUDA_MATRIX3D_H
#define CUDA_MATRIX3D_H

//common defenitioms
#define WARP_SIZE 32
#define LOG2_WARP_SIZE 5
#define PARTIAL_GISTOGRAM_COUNT (WARP_SIZE*32)

//random constants
#define  DCMT_SEED 4172
#define  MT_RNG_PERIOD 607

#define      MT_SHIFT0 12
#define      MT_SHIFTB 7
#define      MT_SHIFTC 15
#define      MT_SHIFT1 18

void controlFunction(short *data, int size);
void controlSmooth(short* input, short* output, int dimx, int dimy, int dimz);

void cuda_histogram1D(const short *source, int sourceSize,unsigned int *hist, int binCount, int warpCount);
void cuda_histogram2D(const short *matetial, const short* mertic, int sourceSize,unsigned int *hist, int binCount, int warpCount);
void cuda_classify(const short *source,short *dist, int sourceSize, const int* classes, int classesCount);
void cuda_sobel(const short *source, short *dist, int xcount, int ycount, int zcount, int type);

#endif
